// ==========================================================================
// Interface file for Mysvc
//
// Solution for CPSC 4780 Fall 2010 Group Project
// FeiWang
// April 8, 2011
//
// This the Interface for server stub in RPC
// ==========================================================================
#ifndef MY_SVC_H
#define MY_SVC_H

#include"ServerSocket.h"
#include"ClientSocket.h"
#include"SocketException.h"
#include "Myxdr.h"
#include "Helper.h"
using namespace std;

// ==========================================================================
// struct name : SVCXPRT
// ServerSocket * - the socket service will use
// port - the port number for service
// string - the address for service
// ==========================================================================
struct SVCXPRT{
    ServerSocket *svc_socket; 
    int port;
    string address;
    ~SVCXPRT();
};

//local function define here
// ==========================================================================
// function name : getlocalhost
// return local host name
// ==========================================================================
string getlocalhost();
// ==========================================================================
// function name : getlocalIP
// return local host IP, eth0 not lo
// ==========================================================================
string getlocalIP();

/*functions*/
// ==========================================================================
// function name : my_svcudp_create
// int the port number for service, if this value is 0
// function will sign next free port to socket 
// return a SVCXPRT *
// ==========================================================================
SVCXPRT * my_svcudp_create(int socket);
// ==========================================================================
// function name : my_svc_register
// SVCXPRT * - the information for register
// int - the prog numberfor register
// return true if can register a service
// else return false
// ==========================================================================
bool my_svc_register(SVCXPRT * transp,int prog);
// ==========================================================================
// function name : my_svc_run
// SVCXPRT * - contain a ServerSocket
// *dispatchfunc - dispatch function
// ==========================================================================
void my_svc_run(SVCXPRT * transp,void (*dispatchfunc)(int ,ServerSocket *));
// ==========================================================================
// function name :  my_svc_sendreply
// ServerSocket * - socket handle the trans
// *xdr_func * - xdr function for result
// char * - the reply msg
// ==========================================================================
bool my_svc_sendreply(ServerSocket * rpc_socket,bool (*xdr_func)(XDR * ,char * ,int),char * result);
// ==========================================================================
// function name : my_svc_getargs
// ServerSocket * - socket handle the trans
// *xdr_func * - xdr function for result
// char * - the arguments
// ==========================================================================
bool my_svc_getargs(ServerSocket * rpc_socket,bool (*xdr_func)(XDR *,char *,int),char * arguments);
#endif
